Traditionally, most applications accessed via the World Wide Web (hereinafter referred to as “web applications”) were implemented using a client-server model in which most application processing was performed on the server. That is, in this model, a “thin client” was used mainly to display static content (e.g., hypertext markup language, or HTML) generated by processing occurring on the server. One drawback to this approach is that any user interaction with the application (e.g., via a browser executing on the client) requires processing by the server. Specifically, any user input to a web page rendered by the browser on the client is communicated to the server, the server processes the input, and the server responds by sending processing output to the client, which the client then loads in the form of a refreshed web page. This communication loop is generally referred to as synchronous communication between the client and server.
More recently, web applications have evolved somewhat in that more processing is performed on the client, to circumvent this synchronous communication loop. For example, some web applications include code which executes on the client and “sits between” the browser and server. This code is generally downloaded from the server when the application is initiated on the client, and may be supplemented by further downloads as the application executes. Usually, the code acts as an extension of the browser, and may be responsible for performing such functions as rendering the web application's user interface via the browser and managing communication between the user interface and server. Typically, the code operates to provide a richer user experience as compared with traditional web applications, by enhancing some aspect of the user interface and/or improving the application's responsiveness when handling certain user interactions.
The code may facilitate asynchronous communication between client and server instead of, or in addition to, the synchronous communications described above. For example, the code may initiate communication with the server despite having received no user input, such as a click on a button or link. As a result, application processing may be performed and new information may be presented via the user interface without forcing the user to wait for a page refresh. As such, the web application's responsiveness may approximate that of an application executing solely on the client. One well-known technology for implementing web applications which employ asynchronous client-server communication is asynchronous java script and XML (AJAX).